import Vue from 'vue'
import Router from 'vue-router'
import http from '@/utils/request'
import { isURL } from '@/utils/validate'

Vue.use(Router)

// 页面路由(独立页面)
export const pageRoutes = [
  {
    path: '/404',
    component: () => import('@/views/pages/404'),
    name: '404',
    meta: { title: '404未找到' },
    beforeEnter (to, from, next) {
      // 拦截处理特殊业务场景
      // 如果, 重定向路由包含__双下划线, 为临时添加路由
      if (/__.*/.test(to.redirectedFrom)) {
        return next(to.redirectedFrom.replace(/__.*/, ''))
      }
      next()
    }
  },
  { path: '/login', component: () => import('@/views/pages/login'), name: 'login', meta: { title: '登录' } }
]

// 模块路由(基于主入口布局页面)
export const moduleRoutes = {
  path: '/',
  component: () => import('@/views/main'),
  name: 'main',
  redirect: { name: 'home' },
  meta: { title: '主入口布局' },
  children: [
    { path: '/home', component: () => import('@/views/modules/home'), name: 'home', meta: { title: '首页', isTab: true } },
    { path: '/sys/user', component: () => import('@/views/modules/sys/user'), name: '用户管理', meta: { title: '用户', isTab: true } },
    { path: '/sys/dept', component: () => import('@/views/modules/sys/dept'), name: '部门管理', meta: { title: '用户', isTab: true } },
    { path: '/sys/role', component: () => import('@/views/modules/sys/role'), name: '角色管理', meta: { title: '用户', isTab: true } },
  ]
}

export function addDynamicRoute (routeParams, router) {
  // 组装路由名称, 并判断是否已添加, 如是: 则直接跳转
  var routeName = routeParams.routeName
  var dynamicRoute = window.SITE_CONFIG['dynamicRoutes'].filter(item => item.name === routeName)[0]
  if (dynamicRoute) {
    return router.push({ name: routeName, params: routeParams.params })
  }
  // 否则: 添加并全局变量保存, 再跳转
  dynamicRoute = {
    path: routeName,
    component: () => import(`@/views/modules/${routeParams.path}`),
    name: routeName,
    meta: {
      ...window.SITE_CONFIG['contentTabDefault'],
      menuId: routeParams.menuId,
      title: `${routeParams.title}`
    }
  }
  router.addRoutes([
    {
      ...moduleRoutes,
      name: `main-dynamic__${dynamicRoute.name}`,
      children: [dynamicRoute]
    }
  ])
  window.SITE_CONFIG['dynamicRoutes'].push(dynamicRoute)
  router.push({ name: dynamicRoute.name, params: routeParams.params })
}

const router = new Router({
  mode: 'hash',
  scrollBehavior: () => ({ y: 0 }),
  routes: pageRoutes.concat(moduleRoutes)
})

router.beforeEach((to, from, next) => {
  // 添加动态(菜单)路由
  // 已添加或者当前路由为页面路由, 可直接访问
  window.SITE_CONFIG['menuList'] = [
    {
      "id": "1067246875800000002",
      "pid": "0",
      "children": [
        {
          "id": "1067246875800000055",
          "pid": "1067246875800000002",
          "children": [],
          "name": "用户管理",
          "url": "sys/user",
          "menuType": 0,
          "icon": "icon-user",
          "permissions": null,
          "sort": 0,
          "createDate": "2022-05-02 17:36:28",
          "parentName": null
        },
        {
          "id": "1067246875800000012",
          "pid": "1067246875800000002",
          "children": [],
          "name": "部门管理",
          "url": "sys/dept",
          "menuType": 0,
          "icon": "icon-apartment",
          "permissions": null,
          "sort": 1,
          "createDate": "2022-05-02 17:36:27",
          "parentName": null
        },
        {
          "id": "1067246875800000007",
          "pid": "1067246875800000002",
          "children": [],
          "name": "角色管理",
          "url": "sys/role",
          "menuType": 0,
          "icon": "icon-team",
          "permissions": null,
          "sort": 2,
          "createDate": "2022-05-02 17:36:27",
          "parentName": null
        }
      ],
      "name": "权限管理",
      "url": null,
      "menuType": 0,
      "icon": "icon-safetycertificate",
      "permissions": null,
      "sort": 0,
      "createDate": "2022-05-02 17:36:27",
      "parentName": null
    },
    {
      "id": "1067246875800000035",
      "pid": "0",
      "children": [
        {
          "id": "1067246875800000025",
          "pid": "1067246875800000035",
          "children": [],
          "name": "菜单管理",
          "url": "sys/menu",
          "menuType": 0,
          "icon": "icon-unorderedlist",
          "permissions": null,
          "sort": 0,
          "createDate": "2022-05-02 17:36:27",
          "parentName": null
        },
        {
          "id": "1067246875800000040",
          "pid": "1067246875800000035",
          "children": [],
          "name": "参数管理",
          "url": "sys/params",
          "menuType": 0,
          "icon": "icon-fileprotect",
          "permissions": "",
          "sort": 1,
          "createDate": "2022-05-02 17:36:28",
          "parentName": null
        },
        {
          "id": "1067246875800000041",
          "pid": "1067246875800000035",
          "children": [],
          "name": "字典管理",
          "url": "sys/dict-type",
          "menuType": 0,
          "icon": "icon-golden-fill",
          "permissions": null,
          "sort": 2,
          "createDate": "2022-05-02 17:36:28",
          "parentName": null
        },
        {
          "id": "1067246875800000030",
          "pid": "1067246875800000035",
          "children": [],
          "name": "定时任务",
          "url": "job/schedule",
          "menuType": 0,
          "icon": "icon-dashboard",
          "permissions": null,
          "sort": 3,
          "createDate": "2022-05-02 17:36:28",
          "parentName": null
        },
        {
          "id": "1067246875800000047",
          "pid": "1067246875800000035",
          "children": [],
          "name": "文件上传",
          "url": "oss/oss",
          "menuType": 0,
          "icon": "icon-upload",
          "permissions": "sys:oss:all",
          "sort": 4,
          "createDate": "2022-05-02 17:36:28",
          "parentName": null
        }
      ],
      "name": "系统设置",
      "url": null,
      "menuType": 0,
      "icon": "icon-setting",
      "permissions": null,
      "sort": 1,
      "createDate": "2022-05-02 17:36:28",
      "parentName": null
    },
    {
      "id": "1067246875800000046",
      "pid": "0",
      "children": [
        {
          "id": "1067246875800000048",
          "pid": "1067246875800000046",
          "children": [],
          "name": "登录日志",
          "url": "sys/log-login",
          "menuType": 0,
          "icon": "icon-filedone",
          "permissions": "sys:log:login",
          "sort": 0,
          "createDate": "2022-05-02 17:36:28",
          "parentName": null
        },
        {
          "id": "1067246875800000049",
          "pid": "1067246875800000046",
          "children": [],
          "name": "操作日志",
          "url": "sys/log-operation",
          "menuType": 0,
          "icon": "icon-solution",
          "permissions": "sys:log:operation",
          "sort": 1,
          "createDate": "2022-05-02 17:36:28",
          "parentName": null
        },
        {
          "id": "1067246875800000050",
          "pid": "1067246875800000046",
          "children": [],
          "name": "异常日志",
          "url": "sys/log-error",
          "menuType": 0,
          "icon": "icon-file-exception",
          "permissions": "sys:log:error",
          "sort": 2,
          "createDate": "2022-05-02 17:36:28",
          "parentName": null
        }
      ],
      "name": "日志管理",
      "url": null,
      "menuType": 0,
      "icon": "icon-container",
      "permissions": null,
      "sort": 2,
      "createDate": "2022-05-02 17:36:28",
      "parentName": null
    },
    {
      "id": "1067246875800000053",
      "pid": "0",
      "children": [
        {
          "id": "1067246875800000051",
          "pid": "1067246875800000053",
          "children": [],
          "name": "SQL监控",
          "url": "{{ApiUrl}}/druid/sql.html",
          "menuType": 0,
          "icon": "icon-database",
          "permissions": null,
          "sort": 0,
          "createDate": "2022-05-02 17:36:28",
          "parentName": null
        },
        {
          "id": "1156748733921165314",
          "pid": "1067246875800000053",
          "children": [],
          "name": "接口文档",
          "url": "{{ApiUrl}}/doc.html",
          "menuType": 0,
          "icon": "icon-file-word",
          "permissions": "",
          "sort": 1,
          "createDate": "2022-05-02 17:36:28",
          "parentName": null
        }
      ],
      "name": "系统监控",
      "url": null,
      "menuType": 0,
      "icon": "icon-desktop",
      "permissions": null,
      "sort": 3,
      "createDate": "2022-05-02 17:36:28",
      "parentName": null
    }
  ]
  return next()
  // if (window.SITE_CONFIG['dynamicMenuRoutesHasAdded'] || fnCurrentRouteIsPageRoute(to, pageRoutes)) {
  //   return next()
  // }
  // // 获取字典列表, 添加并全局变量保存
  // http.get('/sys/dict/type/all').then(({ data: res }) => {
  //   if (res.code !== 0) {
  //     return
  //   }
  //   window.SITE_CONFIG['dictList'] = res.data
  // }).catch(() => {})
  // // 获取菜单列表, 添加并全局变量保存
  // http.get('/sys/menu/nav').then(({ data: res }) => {
  //   console.log(res)
  //   if (res.code !== 0) {
  //     Vue.prototype.$message.error(res.msg)
  //     return next({ name: 'login' })
  //   }
  //   window.SITE_CONFIG['menuList'] = res.data
  //
  //   fnAddDynamicMenuRoutes(window.SITE_CONFIG['menuList'])
  //   console.log(window.SITE_CONFIG['menuList'])
  //
  // }).catch(() => {
  //   next({ name: 'login' })
  // })
})

/**
 * 判断当前路由是否为页面路由
 * @param {*} route 当前路由
 * @param {*} pageRoutes 页面路由
 */
function fnCurrentRouteIsPageRoute (route, pageRoutes = []) {
  var temp = []
  for (var i = 0; i < pageRoutes.length; i++) {
    if (route.path === pageRoutes[i].path) {
      return true
    }
    if (pageRoutes[i].children && pageRoutes[i].children.length >= 1) {
      temp = temp.concat(pageRoutes[i].children)
    }
  }
  return temp.length >= 1 ? fnCurrentRouteIsPageRoute(route, temp) : false
}

/**
 * 添加动态(菜单)路由
 * @param {*} menuList 菜单列表
 * @param {*} routes 递归创建的动态(菜单)路由
 */
function fnAddDynamicMenuRoutes (menuList = [], routes = []) {
  var temp = []
  for (var i = 0; i < menuList.length; i++) {
    if (menuList[i].children && menuList[i].children.length >= 1) {
      temp = temp.concat(menuList[i].children)
      continue
    }
    // 组装路由
    var route = {
      path: '',
      component: null,
      name: '',
      meta: {
        ...window.SITE_CONFIG['contentTabDefault'],
        menuId: menuList[i].id,
        title: menuList[i].name
      }
    }
    // eslint-disable-next-line
    let URL = (menuList[i].url || '').replace(/{{([^}}]+)?}}/g, (s1, s2) => eval(s2)) // URL支持{{ window.xxx }}占位符变量
    if (isURL(URL)) {
      route['path'] = route['name'] = `i-${menuList[i].id}`
      route['meta']['iframeURL'] = URL
    } else {
      URL = URL.replace(/^\//, '').replace(/_/g, '-')
      route['path'] = route['name'] = URL.replace(/\//g, '-')
      console.log('============',`@/views/modules/${URL}`)
      route['component'] = () => import(`@/views/modules/${URL}`)
    }
    routes.push(route)
  }
  console.log('1111111111111',temp)
  console.log('1111111111111',routes)
  if (temp.length >= 1) {
    return fnAddDynamicMenuRoutes(temp, routes)
  }
  // 添加路由
  router.addRoutes([
    {
      ...moduleRoutes,
      name: 'main-dynamic-menu',
      children: routes
    },
    { path: '*', redirect: { name: '404' } }
  ])
  window.SITE_CONFIG['dynamicMenuRoutes'] = routes
  window.SITE_CONFIG['dynamicMenuRoutesHasAdded'] = true
}

export default router
